package cn.vshare.dao;

import cn.vshare.entity.Comment;
import cn.vshare.entity.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;


public interface CommentDao {
    /**
     * 功能描述:获得所有的评论列表
     *
     * @return list
     * @auther 张恒
     * @date 2018/9/14 16:11
     */
    List<Comment> queryAllComment(String videoId);

    /**
     * 功能描述:根据点击数获得评论列表
     *
     * @return list
     * @auther 张恒
     * @date 2018/9/15 11:05
     */
    List<Comment> queryAllCommentByParseCount(String videoId);

    /**
     * 功能描述: 添加评论
     *
     * @param comment 要添加的comment
     * @return 布尔类型的值判断添加是否成功
     * @auther 张恒
     * @date 2018/9/14 16:28
     */
    boolean addComment(Comment comment);

    /**
     * 功能描述: 评论点赞
     *
     * @param user      当前用户
     * @param commentId 修改评论ID
     * @return 布尔
     * @auther 张恒
     * @date 2018/9/14 16:29
     */

    boolean updateCommentAddLike(@Param("id") String id, @Param("user") User user, @Param("commentId") String commentId);

    /**
     * 功能描述: 评论取消赞
     *
     * @param user      当前用户
     * @param commentId 修改评论ID
     * @return 布尔
     * @auther 张恒
     * @date 2018/9/14 16:29
     */

    boolean updateCommentCancelLike(@Param("user") User user, @Param("commentId") String commentId);

    /**
     * 功能描述: 审核评论
     *
     * @param commentId 需要审核的评论ID
     * @return 布尔
     * @auther 张恒
     * @date 2018/9/14 16:45
     */
    boolean updateCommentAuditStatus(@Param("commentId") String commentId, @Param("audiStatus") Integer auditStatus);

    //删除评论,提供多个删除的解决方案

    /**
     * 功能描述: 方案一,直接删除
     *
     * @param commentId 评论ID
     * @return 布尔
     * @auther 张恒
     * @date 2018/9/14 16:55
     */
    boolean delComment(String commentId);

    /**
     * 功能描述:改变评论状态,0是正常,1是删除状态
     * 方案二:改变状态
     *
     * @param commentId
     * @param status
     * @return boolean
     * @auther 张恒
     * @date 2018/9/17 16:03
     */
    boolean updateCommentStatus(@Param("commentId") String commentId, @Param("status") Integer status);


    /**
     * 功能描述: 当评论举报并且符合屏蔽要求时,将评论内容替换为"该评论已删除"
     * 方案三:替换文字内容
     *
     * @param commentId 评论ID
     * @return 布尔
     * @auther 张恒
     * @date 2018/9/14 16:53
     */
    boolean updateCommentByInform(String commentId);


    /**
     * 功能描述:当点赞或者取消赞时更新parseCount
     *
     * @param commentId
     * @param parseCount
     * @return boolean
     * @auther 张恒
     * @date 2018/9/17 20:26
     */
    boolean updateCommentParseCount(@Param("commentId") String commentId, @Param("parseCount") Integer parseCount);

    /**
     * 获取评论信息
     * @param map
     * @return
     * @author penghaixin
     */
    List<Comment> getCommentList(Map<String, Object> map);

    /**
     * 统计评论数目
     * @param map
     * @return
     */
    int countComment(Map<String, Object> map);

    /**
     * 删除评论
     * @author penghaixin
     */
    void delCommentById(String id);


    /**
     *
     * 功能描述:获得当前video的所有评论数量
     *
     * @param videoId
     * @return Integer
     * @auther 张恒
     * @date 2018/9/26 15:02
     */
    Integer queryCommentCount(String videoId);

    /**
     *
     * 功能描述:查询是否点过赞
     * @param commentId
     * @param user
     * @return int
     * @auther Administrator
     * @date 2018/9/26 20:19
     */
    int queryCommentIfLike(@Param("commentId") String commentId, @Param("user") User user);

    /**
     *
     * 功能描述:获取新插入的comment
     *
     * @param
     * @return
     * @auther 张恒
     * @date 2018/9/27 20:26
     */
    Comment queryCommentById(String commentId);
}
